<?php

namespace Users\Register;

use Pinenut\Action as BaseAction;
use Pinenut\User\Auth\Model;

/**
 * Общий скелет регистрации
 *
 * @author kosh
 *        
 */
abstract class Action extends BaseAction {
	
	function privileges() {
		return '#unauthorized';
	}
	
	abstract function auth();
	abstract function profile();
	abstract function afterLogin();
	abstract function afterRegister();
	protected $auth;
	function run() {
		
		// аутентифицируемся
		$auth = $this->auth ();
		if ($auth instanceof Model) {
			if ($auth->isExist ()) {
				$auth = $auth->auth ();
				// уже существует - редиректим куда-нить
				// логинимся
				$ref = $auth->profile->get ();
				if ($ref) {
					$profile = $ref->getEntity ();
					// echo "<pre>";print_r($ref); print_r($profile );exit;
				}
				if (! $profile) {
					throw new \Exception ( 'Profile not found' );
				}
				
				// аутентифицируем
				\Application::auth ()->login ( ( string ) $profile );
				
				$this->afterLogin ();
			} else {
				
				// заполняем профиль
				$profile = $this->profile ( $auth );
				if (! $profile) {
					throw new \Exception ( 'Profile not found' );
				}
				
				$profile->auths [$auth];
				$auth->profile [$profile];
				
				// сохраняем
				$auth->save ();
				$profile->save ();
				
				// аутентифицируем
				\Application::auth ()->login ( ( string ) $profile );
				
				$this->afterRegister ();
			}
		}
	}
}